package com.start.security.handler;


import com.start.common.details.BaseUserDetails;
import com.start.common.entity.StartBaseMenu;
import com.start.common.entity.StartBaseRole;
import com.start.common.vo.SysMenuDataRulesVo;

import java.util.List;

/**
 * 权限认证处理器
 */
public interface IStartPermissionLoad {
    /**
     * 用户类型
     *
     * @return
     */
    String getUserType();

    /**
     * 用户菜单
     *
     * @param userDetails
     * @return
     */
    <T extends StartBaseMenu> List<T> getUserMenus(BaseUserDetails userDetails);

    /**
     * 用户角色
     *
     * @param userDetails
     * @return
     */
    <T extends StartBaseRole> List<T> getUsrRoles(BaseUserDetails userDetails);



    /**
     * 获取当前角色
     *
     * @return
     */
    default StartBaseRole getCurrentRole(BaseUserDetails userDetails) {
        return null;
    }

    /**
     * 获取菜单规则
     *
     * @param userDetails
     * @return
     */
    List<SysMenuDataRulesVo> getMenuDataRules(BaseUserDetails userDetails);

    /**
     * 判断用户是否拥有权限
     *
     * @param userDetails
     * @param permissions
     * @return
     */
    boolean hasPermission(BaseUserDetails userDetails, String... permissions);

    /**
     * 判断用户是否拥有角色
     *
     * @param userDetails
     * @param roles
     * @return
     */
    boolean hasRoles(BaseUserDetails userDetails, String... roles);

    /**
     * 根据组件获取菜单规则
     *
     * @param userDetails
     * @param component
     * @return
     */
    List<SysMenuDataRulesVo> getUserMenuDataRulesByComponent(BaseUserDetails userDetails, String component);

    /**
     * @param userDetails   根据动态表单id组件获取菜单规则
     * @param dynamicFormId
     * @return
     */
    List<SysMenuDataRulesVo> getUserMenuDataRulesByDynamicFormId(BaseUserDetails userDetails, String dynamicFormId);
}
